{
gchar *domain;
GHashTable *objects;
- GHashTable *delayed_properties;
+ GSList *delayed_properties;
GSList *signals;
- gchar *current_root;
GSList *root_objects;
gchar *filename;
};
builder->priv->domain = NULL;
builder->priv->objects = g_hash_table_new_full (g_str_hash, g_str_equal,
g_free, NULL);
- builder->priv->delayed_properties = g_hash_table_new_full (g_str_hash,
- g_str_equal,
- g_free, NULL);
}
GtkBuilderPrivate *priv = GTK_BUILDER (object)->priv;
g_free (priv->domain);
- g_free (priv->current_root);
g_free (priv->filename);
g_hash_table_destroy (priv->objects);
- g_hash_table_destroy (priv->delayed_properties);
g_slist_foreach (priv->signals, (GFunc) _free_signal_info, NULL);
g_slist_free (priv->signals);
}
else
{
- GSList *delayed_properties;
-
- delayed_properties = g_hash_table_lookup (builder->priv->delayed_properties,
- builder->priv->current_root);
property = g_slice_new (DelayedProperty);
property->object = g_strdup (object_name);
property->name = g_strdup (prop->name);
property->value = g_strdup (prop->data);
- delayed_properties = g_slist_prepend (delayed_properties, property);
- g_hash_table_insert (builder->priv->delayed_properties,
- g_strdup (builder->priv->current_root),
- delayed_properties);
+ builder->priv->delayed_properties =
+ g_slist_prepend (builder->priv->delayed_properties, property);
+
continue;
}
}
if (object_type == G_TYPE_INVALID)
g_error ("Invalid type: %s", info->class_name);
- if (!info->parent)
- {
- g_free (builder->priv->current_root);
- builder->priv->current_root = g_strdup (info->id);
- }
-
gtk_builder_get_parameters (builder, object_type,
info->id,
info->properties,
}
static void
-apply_delayed_properties (const gchar *window_name,
- GSList *props,
- GtkBuilder *builder)
+gtk_builder_apply_delayed_properties (GtkBuilder *builder)
{
- GSList *l;
+ GSList *l, *props;
DelayedProperty *property;
GObject *object;
GType object_type;
GObjectClass *oclass;
GParamSpec *pspec;
- g_assert (props != NULL);
- props = g_slist_reverse (props);
+ /* take the list over from the builder->priv.
+ *
+ * g_slist_reverse does not copy the list, so the list now
+ * belongs to us (and we free it at the end of this function).
+ */
+ props = g_slist_reverse (builder->priv->delayed_properties);
+ builder->priv->delayed_properties = NULL;
+
for (l = props; l; l = l->next)
{
property = (DelayedProperty*)l->data;
}
void
-_gtk_builder_finish (GtkBuilder *builder)
+_gtk_builder_finish (GtkBuilder *builder)
{
- if (builder->priv->delayed_properties)
- g_hash_table_foreach (builder->priv->delayed_properties,
- (GHFunc)apply_delayed_properties, builder);
+ gtk_builder_apply_delayed_properties (builder);
}
/**